Advent of Cyber día 5

Objetivos:

Herramientas y conocimientos:


Sandbox

Un sandbox es un entorno aislado generalmente usado para probar el comportamiento de código malicioso, sin afectar al sistema. Usualmente se instalan además algunas herramientas para monitorear el comportamiento.

Para detectar si un entorno es de sandbox, lo más común es primero verificar si existe la carpeta C:\Program Files que no está presente en la mayoría de los entornos de sandbox.

En C se vería de esta forma:

void registryCheck() {
    const char *registryPath = "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion";
    const char *valueName = "ProgramFilesDir";
    
    // Prepare the command string for reg.exe
    char command[512];
    snprintf(command, sizeof(command), "reg query \"%s\" /v %s", registryPath, valueName);
    // Run the command
    int result = system(command);
    // Check for successful execution
    if (result == 0) {
        printf("Registry query executed successfully.\n");
    } else {
        fprintf(stderr, "Failed to execute registry query.\n");
    }
}
int main() {
    const char *flag = "[REDACTED]";
    registryCheck();
        return 0;

} 

Básicamente utiliza la ruta del registro, busca el valor, revisa si fue exitoso y retorna la respuesta si es verdadera.


YARA

Herramienta usada para identificar y clasificar malware basado en patrones de código. Se pueden buscar cadenas específicas, headers, patrones de comportamiento, etc.

Por ejemplo:

rule SANDBOXDETECTED
{
    meta:
        description = "Detects the sandbox by querying the registry key for Program Path"
        author = "TryHackMe"
        date = "2024-10-08"
        version = "1.1"

    strings:
        
    $cmd= "Software\\Microsoft\\Windows\\CurrentVersion\" /v ProgramFilesDir" nocase

    

    condition:
        $cmd
}

Es una regla que busca en el $cmd si es que se está buscando la cadena donde está el registro. De forma que si se detecta un True Positive, hace un log de ello.


Pruebas

Vamos a ejecutar powershell, dirigirnos a C:\Tools y correr el comando: \JingleBells.ps1, esto se mantendrá ejecutado y va a monitorear los event logs. Alertará si encuentra que se buscó la cadena anterior.

Ejecutaremos un malware preconfigurado:
C:\Tools\Malware\MerryChristmas.exe.
Si todo sale bien, saltará el EDR (Endpoint detection and response) y nos dará la bandera de la pregunta 1.

Ahora, podríamos ofuscar el comando del malware, de modo que técnicamente nos saltaríamos la regla YARA.
Por ejemplo la línea:

    const char *registryPath = "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion";
    const char *valueName = "ProgramFilesDir";

Podríamos codificarla en base64:

    const char *encodedCommand = "RwBlAHQALQBJAHQAZQBtAFAAcgBvAHAAZQByAHQAeQAgAC0AUABhAHQAaAAgACIASABLAEwATQA6AFwAUwBvAGYAdAB3AGEAcgBlAFwATQBpAGMAcgBvAHMAbwBmAHQAXABXAGkAbgBkAG8AdwBzAFwAQwB1AHIAcgBlAG4AdABWAGUAcgBzAGkAbwBuACIAIAAtAE4AYQBtAGUAIABQAHIAbwBnAHIAYQBtAEYAaQBsAGUAcwBEAGkAcgA=";


Floss

Floss es una herramienta que extrae y decodifica cadenas, especializado en malwares.
Para usarlo:
PS C:\Tools\FLOSS> floss.exe C:\Tools\Malware\MerryChristmas.exe |Out-file C:\tools\malstrings.txt
El comando hace lo siguiente:

Con esto obtenemos lo siguiente:

La primera bandera


YARA rules en sysmon logs

Una regla yara usualmente buscará eventos con un id determinado. Podemos extraerlos de Sysmon de windows. Afortunadamente con el monitor EDR que levantamos con anterioridad, ya tenemos el ID que necesitamos:

Iremos al windows event viewer -> Apllications and services logs -> Microsoft -> Windows -> Sysmon -> Operational -> Filter Current Log

Vamos a la pestaña XML y editaremos manualmente:


Con todo este proceso hemos logrado obtener todas las respuestas como están detalladas más arriba :)

Procedamos al Advent of Cyber día 7